package com.example.translateappjava.Service.ChatGPT;


import android.app.Activity;
import android.util.Log;

import java.io.IOException;

/**
 * ChatGptContextHelper 类用于向ChatGPT发送请求，并支持在回调中传递上下文对象。
 * 这个版本专门设计用于需要将响应与特定请求关联的场景，如处理列表中的多个项目。
 */
public class ChatGptContextHelper {

    private final Activity activity;
    private OnChatGptResponseListener listener;

    public ChatGptContextHelper(Activity activity) {
        this.activity = activity;
    }

    /**
     * 监听器接口，用于接收ChatGPT的响应或错误，并附带上下文信息。
     */
    public interface OnChatGptResponseListener {
        /**
         * 当收到ChatGPT的成功响应时调用。
         * @param rawJsonResponse GPT返回的原始JSON字符串。
         * @param context 与此请求关联的上下文对象。
         */
        void onChatGptResponse(String rawJsonResponse, Object context);

        /**
         * 当请求过程中发生错误时调用。
         * @param message 错误信息。
         * @param context 与此请求关联的上下文对象。
         */
        void onError(String message, Object context);
    }

    public void setOnChatGptResponseListener(OnChatGptResponseListener listener) {
        this.listener = listener;
    }

    /**
     * 发送问题到ChatGPT，并携带一个上下文对象。
     * @param question 要发送给ChatGPT的问题。
     * @param context 一个任意对象，将在响应回调时原样返回，用于关联请求和响应。
     */
    public void chatGPTRequest(final String question, final Object context) {
        new Thread(() -> {
            try {
                // 在后台线程中执行网络请求
                final String rawJsonResponse = performNetworkRequest(question);
                // 在 UI 线程中处理网络请求结果
                activity.runOnUiThread(() -> {
                    // Log.v("ChatGptContextHelper", "Raw JSON Response for question (context: " + (context != null ? context.toString().substring(0, Math.min(context.toString().length(), 50)) : "null") + "): " + rawJsonResponse.substring(0, Math.min(rawJsonResponse.length(), 150)));
                    // Log.v("ChatGptContextHelper", "Question: " + question.substring(0, Math.min(question.length(), 100)));
                    if (listener != null) {
                        listener.onChatGptResponse(rawJsonResponse, context);
                    }
                });
            } catch (IOException e) {
                Log.e("ChatGptContextHelper", "Network request failed for question: " + question.substring(0, Math.min(question.length(), 100)), e);
                activity.runOnUiThread(() -> {
                    if (listener != null) {
                        listener.onError("Failed to fetch data: " + e.getMessage(), context);
                    }
                });
            }
        }).start();
    }

    /**
     * 执行实际的网络请求。
     * 你需要确保 ChatGPTImplication 类是可访问的，并且其 getChatResponse 方法是线程安全的
     * 或者每次都创建新的实例（如下所示）。
     */
    private String performNetworkRequest(String question) throws IOException {
        // 假设 ChatGPTImplication 可以被实例化并且 getChatResponse 是其方法
        // 如果 ChatGPTImplication 有状态或者不是线程安全的，每次创建新实例可能更安全
        com.example.translateappjava.Service.ChatGPT.ChatGPTImplication chatGPTImplication = new com.example.translateappjava.Service.ChatGPT.ChatGPTImplication();
        return chatGPTImplication.getChatResponse(question);
    }

    /**
     * 公共工具方法：解析GPT的JSON响应，提取"content"字段。
     * @param jsonResponse GPT返回的原始JSON字符串
     * @return 解析出的content字符串，或错误信息/提示
     */
    public static String parseGptContentFromJson(String jsonResponse) {
        if (jsonResponse == null || jsonResponse.isEmpty()) return null;
        try {
            org.json.JSONObject jsonObject = new org.json.JSONObject(jsonResponse);
            org.json.JSONArray choices = jsonObject.getJSONArray("choices");
            if (choices.length() > 0) {
                org.json.JSONObject firstChoice = choices.getJSONObject(0);
                if (firstChoice.has("message")) {
                    org.json.JSONObject message = firstChoice.getJSONObject("message");
                    if (message.has("content")) {
                        return message.getString("content");
                    }
                } else if (firstChoice.has("text")) { // 兼容旧API
                    return firstChoice.getString("text");
                }
            }
        } catch (Exception e) {
            Log.e("ChatGptContextHelper", "Error parsing JSON response for content", e);
            return null; // 或者抛出自定义异常，或者返回特定错误字符串
        }
        return null; // 如果没有找到content
    }
}